package com.atguigu.bigdata.scala.chapter02

import com.atguigu.bigdata.scala.bean.User

object Scala09_Datatype {

    def main(args: Array[String]): Unit = {

        // TODO 数据类型
        // scala语言有2大数据类型
        // TODO 1. 任意值类型
        //val a : AnyVal = true
        val b : Byte = 10
        val s : Short = 10
        val i : Int = 10
        val c : Char = 10
        val l : Long = 10
        val f : Float = 10
        val d : Double = 10
        val bln : Boolean = true

        // Unit类比为java中的void关键字，表示方法没有返回值
        // Unit类型只有一个对象，这个对象就是：（），所以如果在控制台上打印对象时，得到的是（），就是对象的类型为Unit
        val u : Unit = test()
        println(u)

        // TODO 2. 任意引用类型
        //val user : AnyRef = new User()
        // Java中如果一个对象为空，那么一般使用null来表示，但是null为关键字，不是面向对象的
        // 所以scala中给null也设定类型 : Null,这个类型的对象只有一个，就是null
        val n1 : Null = null
        val user : User = null

        // Nothing是scala语言中特定的类型，表示没有值,主要为了弥补java的缺陷
        // java不是一个完全面向对象的语言，因为其中很多的语法不是面向对象的
        // 如：基本数据类型，null, void
        // scala设计的时候，就是要完全面向对象，就需要将java中不是面向对象的语法进行补充
        // 如：int=>Int(class), null=>Null(class), void=>Unit
        //    抛出异常本身也不是面向对象,为了能让这个操作面向对象，所以设计了一个专门的类型，表示没有值：Nothing
        // 歧义

        //
        /*
          public int test() {
              int i = 0;
              //return 10 / i;
              throw new Exception();
          }

         */

    }
    def test1() : Nothing = {
        throw new Exception()
    }
    def test(): Unit = {

    }
}
